/**
 * 
 */
package mx.com.asteca.fachada.impl;

import java.util.List;

import mx.com.asteca.comun.dto.AsentamientoDTO;
import mx.com.asteca.comun.dto.DomicilioDTO;
import mx.com.asteca.comun.dto.EstadoDTO;
import mx.com.asteca.comun.dto.InstitutoContactoDTO;
import mx.com.asteca.comun.dto.InstitutoDTO;
import mx.com.asteca.comun.dto.MunicipioDTO;
import mx.com.asteca.comun.dto.PersonaDTO;
import mx.com.asteca.fachada.FachadaException;
import mx.com.asteca.fachada.InstitutoFachada;
import mx.com.asteca.servicio.AsentamientoServicio;
import mx.com.asteca.servicio.BaseService;
import mx.com.asteca.servicio.DomicilioServicio;
import mx.com.asteca.servicio.EstadoServicio;
import mx.com.asteca.servicio.InstitutoServicio;
import mx.com.asteca.servicio.MunicipioServicio;
import mx.com.asteca.servicio.PersonaServicio;
import mx.com.asteca.servicio.ServicioException;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * @author JAMARO
 *
 */
@Component
public class InstitutoFachadaImpl extends
		BaseFachadaImpl<InstitutoDTO, Integer> implements InstitutoFachada{

	@Autowired
	private InstitutoServicio servicioInst;
	@Autowired
	private MunicipioServicio servicioMunicipio;
	@Autowired
	private AsentamientoServicio servicioAsentamiento;
	@Autowired
	private EstadoServicio servicioEstado;
	@Autowired
	private DomicilioServicio servicioDomicilio;
	@Autowired
	private PersonaServicio servicioPersona;
	
	@Override
	BaseService getBaseService() {
		return servicioInst;
	}
	
	@Override
	public void updateContactos(InstitutoContactoDTO director, InstitutoContactoDTO representante) throws FachadaException{
		PersonaDTO dtoDirector = director.getDtoPersona();
		PersonaDTO dtoRepresentante = representante.getDtoPersona();		
		try {
			servicioPersona.update(dtoDirector);
			servicioPersona.update(dtoRepresentante);
			servicioInst.updateInstitutoPuesto(director.getIdPuesto(), director.getPuesto());
			servicioInst.updateInstitutoPuesto(representante.getIdPuesto(), representante.getPuesto());
		} catch (ServicioException e) {
			throw new FachadaException("Error en updateContactos:"+e.getMessage(), e);
		}
		
	}
	
	@Override
	public void updateDomicilio(DomicilioDTO dtoDomicilio) throws FachadaException{
		try {
			servicioDomicilio.update(dtoDomicilio);
		} catch (ServicioException e) {
			throw new FachadaException("Error en updateDomicilio:"+e.getMessage(), e);
		}
	}
	
	@Override
	public MunicipioDTO findMunicipio(int idMunicipio, int idEstado)
			throws FachadaException {
		try {
			MunicipioDTO dto = servicioMunicipio.getFromMunicipioEdo(idEstado,
					idMunicipio);
			return dto;
		} catch (ServicioException e) {
			throw new FachadaException("Error en findMunicipio Fachada : "
					+ e.getMessage(), e);
		}
	}

	@Override
	public EstadoDTO findEstado(int idEstado) throws FachadaException {
		try {
			EstadoDTO dto = servicioEstado.findByPK(idEstado);
			return dto;
		} catch (ServicioException e) {
			throw new FachadaException("Error en findEstado Fachada : "
					+ e.getMessage(), e);
		}
	}

	@Override
	public List<AsentamientoDTO> findAsentamientosByCp(int cp)
			throws FachadaException {
		try {
			List<AsentamientoDTO> listaAsentamientos = servicioAsentamiento
					.findAsentamientosByCp(cp);
			return listaAsentamientos;
		} catch (ServicioException e) {
			throw new FachadaException(
					"Error en findAsentamientosByCp Fachada : "
							+ e.getMessage(), e);
		}
	}

	
	@Override
	public List<Integer> getDistincCPs() throws FachadaException {
		try {
			List<Integer> listaAsentamientos = servicioAsentamiento
					.getDistinctCPs();
			return listaAsentamientos;
		} catch (ServicioException e) {
			throw new FachadaException("Error en getAsentamientos Fachada : "
					+ e.getMessage(), e);
		}
	}

}
